

package Controlador.stegsecret;
import java.io.*;

// Referenced classes of package paqueteXStegSecret:
//            utils

public class fichBMP
{

    public fichBMP(String s)
    {
        fichero = null;
        nombreFichero = null;
        buffer = null;
        tamFichero = 0;
        try
        {
            nombreFichero = s;
            fichero = new RandomAccessFile(new File(s), "r");
            tamFichero = (int)(new File(s)).length();
        }
        catch(IOException ioexception)
        {
            System.out.println(ioexception);
        }
    }

    public void cierraFichero()
    {
        try
        {
            fichero.close();
        }
        catch(Exception exception) { }
    }

    public byte isBMP()
    {
        byte byte0 = NOK_FORMAT;
        try
        {
            fichero.seek(0L);
            if(fichero.readByte() == 66 && fichero.readByte() == 77)
            {
                buffer = new byte[4];
                fichero.read(buffer, 0, 4);
                if(tamFichero > HEADER_BMP + INFORMATION_HEADER_BMP)
                {
                    byte0 = OK_FORMAT_HEADER;
                    if(tamFichero > utils.bufferToIntInv(buffer, 0))
                        byte0 = OK_BMP_NOK_EOF;
                    if(tamFichero == utils.bufferToIntInv(buffer, 0))
                        byte0 = OK_BMP;
                }
            }
        }
        catch(Exception exception) { }
        return byte0;
    }

    public int tamInfOculta()
    {
        int i = positionEOF();
        if(i > -1)
            return tamFichero - i;
        else
            return 0;
    }

    public int positionEOF()
    {
        int i = -1;
        try
        {
            fichero.seek(2L);
            buffer = new byte[4];
            fichero.read(buffer, 0, 4);
            i = utils.bufferToIntInv(buffer, 0);
        }
        catch(Exception exception) { }
        return i;
    }

    public byte[] infoEOFextra()
    {
        byte abyte0[] = null;
        int i = positionEOF();
        if(i > -1)
            try
            {
                if(tamFichero - i > 0)
                {
                    fichero.seek(i);
                    abyte0 = new byte[tamFichero - i];
                    fichero.read(abyte0, 0, tamFichero - i);
                }
            }
            catch(Exception exception)
            {
                abyte0 = null;
            }
        return abyte0;
    }

    public int posicionPixels()
    {
        try
        {
            fichero.seek(10L);
            buffer = new byte[4];
            fichero.read(buffer, 0, 4);
            return utils.bufferToIntInv(buffer, 0);
        }
        catch(Exception exception)
        {
            return -1;
        }
    }

    public Object[] propiedades()
    {
        try
        {
            Object aobj[] = new Object[9];
            fichero.seek(HEADER_BMP + 4);
            buffer = new byte[4];
            fichero.read(buffer, 0, 4);
            aobj[0] = new Integer(utils.bufferToIntInv(buffer, 0));
            fichero.read(buffer, 0, 4);
            aobj[1] = new Integer(utils.bufferToIntInv(buffer, 0));
            buffer = new byte[2];
            fichero.read(buffer, 0, 2);
            aobj[2] = new Short((short)(buffer[1] << 8 | buffer[0]));
            buffer = new byte[2];
            fichero.read(buffer, 0, 2);
            aobj[3] = new Short((short)(buffer[1] << 8 | buffer[0]));
            buffer = new byte[4];
            fichero.read(buffer, 0, 4);
            aobj[4] = new Integer(utils.bufferToIntInv(buffer, 0));
            buffer = new byte[4];
            fichero.read(buffer, 0, 4);
            aobj[5] = new Integer(utils.bufferToIntInv(buffer, 0));
            buffer = new byte[4];
            fichero.read(buffer, 0, 4);
            aobj[6] = new Integer(utils.bufferToIntInv(buffer, 0));
            buffer = new byte[4];
            fichero.read(buffer, 0, 4);
            aobj[7] = new Integer(utils.bufferToIntInv(buffer, 0));
            buffer = new byte[4];
            fichero.read(buffer, 0, 4);
            aobj[8] = new Integer(utils.bufferToIntInv(buffer, 0));
            return aobj;
        }
        catch(Exception exception)
        {
            return null;
        }
    }

    public static byte HEADER_BMP = 14;
    public static byte INFORMATION_HEADER_BMP = 40;
    public static byte OK_FORMAT_HEADER = 0;
    public static byte OK_BMP_NOK_EOF = 1;
    public static byte OK_BMP = 2;
    public static byte NOK_FORMAT = 3;
    private RandomAccessFile fichero;
    private String nombreFichero;
    private byte buffer[];
    private int tamFichero;

}